SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
CREATE Procedure [dbo].[SP_TMSACA_MENS_I03]    
/*-------------------------------------------------------*/    
/*---Empresa              : OFISIS S.A.                --*/    
/*---Cliente              : OFISIS                 --*/    
/*---Sistema              : Tesoreria                  --*/    
/*---M®dulo               : Empresa                    --*/    
/*---Programa             : Reprocesamiento del Mes    --*/    
/*---Script               : tmsaca_m.sql               --*/    
/*---Nombre SP            : SP_TMSACA_MENS_I03         --*/    
/*---Desarrollado por     : Javier Flores A.           --*/    
/*---Fecha Creaci®n       : 20/07/1999                 --*/    
/*---Base Datos           : Microsoft Sql Server       --*/    
/*---Versi®n              : 7.0                        --*/    
/*---Invoca a SP          :                            --*/    
/*-------------------------------------------------------*/    
    
/*-------------------------------------------------------*/    
/*---Modificado 1 por     :   DCH                      --*/    
/*---Fecha Modificaci®n   :   09/11/2004                 --*/     
/*---Detalle Modificaci®n :   Actualizacion de Nuevo Mundo --*/    
/*-------------------------------------------------------*/    
    
/*-------------------------------------------------------*/    
/*---Comentarios                                       --*/    
/*---                                                  --*/    
/*---                                                  --*/    
/*-------------------------------------------------------*/    
    
/*-------------------------------------------------------*/    
/*---Drop Proc SP_TMSACA_MENS_I03                      --*/    
/*---Grant all on SP_TMSACA_MENS_I03 to public         --*/     
/*---SP_TMSACA_MENS_I03                                --*/    
/*-------------------------------------------------------*/    
 @ISCO_EMPR TD_VC_002,     
 @ISCO_USUA_MODI TD_VC_008_USUA,    
 @ISCO_CAJA TD_VC_008,     
 @ISAA_CAJA TD_VC_004,     
 @ISMM_CAJA TD_VC_002  
 As  
Declare  @CSCO_CAJA TD_VC_008,     
          @CSAA_CAJA TD_VC_004, @CSMM_CAJA TD_VC_002,     
          @CNIM_SALD_INIC TD_NU_016_004, @CNIM_INGR TD_NU_016_004, @CNIM_EGRE TD_NU_016_004,    
          @VNCO_0001 TD_IN_001, @VNCO_0002 TD_IN_001,     
          @VNIM_AU01 TD_NU_016_004, @VNIM_AU02 TD_NU_016_004, @CSTI_SITU TD_VC_003    
    
    
UPDATE TMSACA_MENS    
SET IM_INGR = T2.IM_INGR,    
    IM_EGRE = T2.IM_EGRE,  
 FE_USUA_MODI = GETDATE(),       
    CO_USUA_MODI = @ISCO_USUA_MODI          
FROM TMSACA_MENS T1, (SELECT  CO_EMPR, CO_CAJA, AA_CAJA, MM_CAJA,    
    SUM(PATINDEX(TI_MOVI, 'I') * IM_MOVI) IM_INGR,    
    SUM(PATINDEX(TI_MOVI, 'E') * IM_MOVI) IM_EGRE    
   FROM TCMOVI_CAJA    
   WHERE CO_EMPR = @ISCO_EMPR    
   AND CO_CAJA = @ISCO_CAJA    
   AND AA_CAJA = @ISAA_CAJA    
   AND MM_CAJA = @ISMM_CAJA    
   AND TI_SITU IN ('ACT', 'EXT')    
   GROUP BY CO_EMPR, CO_CAJA, AA_CAJA, MM_CAJA) T2    
WHERE T1.CO_EMPR = T2.CO_EMPR    
AND T1.CO_CAJA = T2.CO_CAJA    
AND T1.AA_CAJA = T2.AA_CAJA    
AND T1.MM_CAJA = T2.MM_CAJA    
    
    If @@error <> 0    
       Begin                         
         Rollback Tran    
         Return    
       end         
    
    
Begin Tran SP_TMSACA_MENS_I03    
    
    Declare CU_TMSACA_MENS_I03 Cursor    
    For     
    Select CO_CAJA, AA_CAJA, MM_CAJA, IM_SALD_INIC, IM_INGR, IM_EGRE, TI_SITU    
    From   TMSACA_MENS    
    Where  CO_EMPR = @ISCO_EMPR     
    And    CO_CAJA = @ISCO_CAJA    
    And    AA_CAJA+MM_CAJA >= @ISAA_CAJA+@ISMM_CAJA    
                    
    Open  CU_TMSACA_MENS_I03    
    Fetch CU_TMSACA_MENS_I03 into @CSCO_CAJA,     
    @CSAA_CAJA, @CSMM_CAJA, @CNIM_SALD_INIC, @CNIM_INGR, @CNIM_EGRE, @CSTI_SITU    
    
    Select @VNCO_0001 = 0, @VNCO_0002 = 0, @VNIM_AU01 = 0, @VNIM_AU02 = 0    
    
    While (@@FETCH_STATUS = 0)    
      Begin    
   If (@@FETCH_STATUS < 0)    
          Begin    
         RAISERROR 20001 'FIN DE ARCHIVO'    
    Close CU_TMSACA_MENS_I03    
    Deallocate CU_TMSACA_MENS_I03     
    Return    
       End    
      
        If @VNCO_0001 >= 1           
           Begin    
             If @CSTI_SITU = 'CER'     
                Begin    
                  Update TMSACA_MENS    
             Set IM_SALD_INIC = @VNIM_AU01,  
     FE_USUA_MODI = GETDATE(),       
     CO_USUA_MODI = @ISCO_USUA_MODI    
                  Where CO_EMPR = @ISCO_EMPR     
                  AND   CO_CAJA = @CSCO_CAJA    
                  AND   AA_CAJA = @CSAA_CAJA    
                  AND   MM_CAJA = @CSMM_CAJA    
    
                  If @@error <> 0    
                     Begin                       
                       Close CU_TMSACA_MENS_I03    
                       Deallocate CU_TMSACA_MENS_I03    
                       Rollback Tran    
                       Return    
                     End    
                End    
    
             If @CSTI_SITU = 'ACT'    
                Begin    
                  Update TMSACA_MENS  
                   Set    IM_SALD_INIC = @VNIM_AU01,  
                 FE_USUA_MODI = GETDATE(),       
        CO_USUA_MODI = @ISCO_USUA_MODI     
                  Where  CO_EMPR = @ISCO_EMPR     
                  And    CO_CAJA = @CSCO_CAJA                   And    AA_CAJA = @CSAA_CAJA    
                  And    MM_CAJA = @CSMM_CAJA    
    
                  Select @VNCO_0002 = @VNCO_0002 + 1     
      
                  If @@error <> 0    
                     Begin                       
                       Close CU_TMSACA_MENS_I03    
                       Deallocate CU_TMSACA_MENS_I03    
                       Rollback Tran    
                       Return    
                     End    
               End    
       End           
           
       /* --- CALCULAMOS EL SALDO INICIAL PARA LOS DEMAS MESES EN BASE AL TI_SITU ------ */    
       If @VNCO_0002 = 0    
          Begin    
            /*  -------- LA PRIMERA VEZ : CALCULO EL SALDO INICIAL PARA EL SGTE MES --------- */          
       
            If @VNCO_0001 = 0    
               Select @VNIM_AU01 =  (ISNULL(@CNIM_SALD_INIC,0) + ISNULL(@CNIM_INGR,0)) - ISNULL(@CNIM_EGRE,0)    
    
            /* --------- CALCULO : DEL SALDO INICIAL PARA LOS SGTES MESES -------------------- */    
    
            If @VNCO_0001 >= 1    
               Begin    
                 Select @VNIM_AU02 = ( @VNIM_AU01 + ISNULL(@CNIM_INGR,0)) - ISNULL(@CNIM_EGRE,0)    
                 Select @VNIM_AU01 = @VNIM_AU02          
               End    
          
            Fetch CU_TMSACA_MENS_I03 into @CSCO_CAJA,     
            @CSAA_CAJA, @CSMM_CAJA, @CNIM_SALD_INIC, @CNIM_INGR, @CNIM_EGRE, @CSTI_SITU    
    
            Select @VNCO_0001 = @VNCO_0001 + 1             
         End      
    
    
         If @VNCO_0002 = 1    
            Break    
     
   End   /* ----- DEL WHILE ----- */    
    
   Close CU_TMSACA_MENS_I03    
   Deallocate CU_TMSACA_MENS_I03    
    
   /* -------------- TI_SITU = 'CER' , PARA EL PERIODO QUE SE REAPERTURO --------- */     
    
    Update TMSACA_MENS    
    Set    TI_SITU = 'CER',  
     FE_USUA_MODI = GETDATE(),       
           CO_USUA_MODI = @ISCO_USUA_MODI    
    Where  CO_EMPR = @ISCO_EMPR     
    And    CO_CAJA = @ISCO_CAJA    
    And    AA_CAJA = @ISAA_CAJA     
    And    MM_CAJA = @ISMM_CAJA                   
    
    If @@error <> 0    
       Begin                         
         Rollback Tran    
         Return    
       end         
    
Commit Tran    
    
/*-------------------------- Fin -----------------------------*/


GO
